//  创建时间: 2022年7月11日
//  在PS端通过AXI_GPIO接口模拟出一个SPI通信模块专门用于配置PL端的Float数据（32bits）寄存器
//  根据当前的设计,需要以浮点数形式出现的数据主要是用于实现"数字相关双采样"的权重系数. 这些系数
//  随着电路的不同\芯片的不同\通道的不同,都会出现一些变化,目前我们的策略是在同一份FPGA程序中,
//  除了实现DCDS算法,还要包含CCD的各OS输出波形以及驱动信号波形的完整采集的功能,有了这些波形数据
//  就可以直接算出"最佳"的DCDS权重系数

#include "REG_BITS.h"

#ifndef _FLOAT_SPI_PS_H_
#define _FLOAT_SPI_PS_H_

//  设置A3,A2,A1,A0，实现对
void set_FLOAT_SPI_PS_A3( uint32_t *gpio_reg, uint32_t A3 );
void set_FLOAT_SPI_PS_A2( uint32_t *gpio_reg, uint32_t A2 );
void set_FLOAT_SPI_PS_A1( uint32_t *gpio_reg, uint32_t A1 );
void set_FLOAT_SPI_PS_A0( uint32_t *gpio_reg, uint32_t A0 );

void set_FLOAT_SPI_PS_SET_OS_CH( uint32_t *gpio_reg, uint32_t os_ch );

//  发送32位的float到PL端的地址为寄存器中
//  
void Config_Float_Regs_PL(  uint32_t *gpio_fp_ctrl,
                            uint32_t *gpio_fp_data,
                            uint16_t data_size,
                            uint32_t *float_regs );

void Config_DCDS_Weights(   uint32_t *gpio_fp_ctrl,
                            uint32_t *gpio_fp_data,
                            uint16_t data_size,
                            uint16_t os_ch,
                            uint32_t *float_regs );

void FLOAT_SPI_PS_SCLK( uint32_t *gpio_fp_ctrl );

void FLOAT_SPI_PS_RST( uint32_t *gpio_fp_ctrl );

void FLOAT_SPI_PS_SET_ADDR( uint32_t *gpio_fp_ctrl, uint16_t addr );

void FLOAT_SPI_PS_SET_DATA( uint32_t *gpio_fp_data, uint32_t data );

#endif  // _FLOAT_SPI_PS_H_


